/* Copyright (c) 1996-2015, OPC Foundation. All rights reserved.
   The source code in this file is covered under a dual-license scenario:
     - RCL: for OPC Foundation members in good-standing
     - GPL V2: everybody else
   RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/
   GNU General Public License as published by the Free Software Foundation;
   version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2
   This source code is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/

package org.opcfoundation.ua.transport;

import java.util.EnumSet;

/**
 * Message async read states.
 * 
 * Initial states: Waiting, Reading
 * Final states: Complete, Error
 * 
 * The only allowed state transition paths: 
 *   Waiting -&gt; Reading -&gt; Complete
 *   Waiting -&gt; Reading -&gt; Error
 *   Reading -&gt; Complete
 *   Reading -&gt; Error
 *
 * @see AsyncRead
 */
public enum ReadState {
	Waiting,		// Reply has not arrived 
	Complete,		// Message has been received completely
	Error;			// Error by stack or abortion. See getException()
	
	public static final EnumSet<ReadState> FINAL_STATES = EnumSet.of(Complete, Error);
	
	public boolean isFinal() {
		return this==Complete || this==Error;
	}
	
}
